[iPhone Obj-C] How to move a label with the wave of the iPhone?
Posted
by Didi
on Stack Overflow
See other posts from Stack Overflow
or by Didi
Published on 2010-04-30T16:25:01Z
Indexed on
2010/04/30
16:27 UTC
Read the original article
Hit count: 194
The code below is from the book Beginning iPhone 3 Development, chapter 15, using the accelerometer to control a ball. I want to use a label instead of the ball, and only move in the x direction. However, I donno how to revise the code to achieve this goal. Can anyone please help me? THX so much!!!!
(id)initWithCoder:(NSCoder *)coder {
if (self = [super initWithCoder:coder]) { self.image = [UIImage imageNamed:@"ball.png"]; self.currentPoint = CGPointMake((self.bounds.size.width / 2.0f) + (image.size.width / 2.0f), (self.bounds.size.height / 2.0f) + (image.size.height / 2.0f));
ballXVelocity = 0.0f; ballYVelocity = 0.0f;
} return self; }
(id)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { // Initialization code } return self; }
(void)drawRect:(CGRect)rect { // Drawing code [image drawAtPoint:currentPoint]; }
(void)dealloc { [image release]; [acceleration release];
[super dealloc]; }
//#pragma mark - - (CGPoint)currentPoint {
return currentPoint;
} - (void)setCurrentPoint:(CGPoint)newPoint { previousPoint = currentPoint; currentPoint = newPoint;
if (currentPoint.x < 0) {
currentPoint.x = 0;
//ballXVelocity = 0;
ballXVelocity = - (ballXVelocity / 2.0);
}
if (currentPoint.y < 0){
currentPoint.y = 0;
//ballYVelocity = 0;
ballYVelocity = - (ballYVelocity / 2.0);
}
if (currentPoint.x > self.bounds.size.width - image.size.width) {
currentPoint.x = self.bounds.size.width - image.size.width;
//ballXVelocity = 0;
ballXVelocity = - (ballXVelocity / 2.0);
}
if (currentPoint.y > self.bounds.size.height - image.size.height) {
currentPoint.y = self.bounds.size.height - image.size.height;
//ballYVelocity = 0;
ballYVelocity = - (ballYVelocity / 2.0);
}
CGRect currentImageRect = CGRectMake(currentPoint.x, currentPoint.y,
currentPoint.x + image.size.width,
currentPoint.y + image.size.height);
CGRect previousImageRect = CGRectMake(previousPoint.x, previousPoint.y,
previousPoint.x + image.size.width,
currentPoint.y + image.size.width);
[self setNeedsDisplayInRect:CGRectUnion(currentImageRect,
previousImageRect)];
}
(void)draw { static NSDate *lastDrawTime;
if (lastDrawTime != nil) { NSTimeInterval secondsSinceLastDraw = -([lastDrawTime timeIntervalSinceNow]);
ballYVelocity = ballYVelocity + -(acceleration.y * secondsSinceLastDraw); ballXVelocity = ballXVelocity + acceleration.x * secondsSinceLastDraw; CGFloat xAcceleration = secondsSinceLastDraw * ballXVelocity * 500; CGFloat yAcceleration = secondsSinceLastDraw * ballYVelocity * 500; self.currentPoint = CGPointMake(self.currentPoint.x + xAcceleration, self.currentPoint.y +yAcceleration);
} // Update last time with current time [lastDrawTime release]; lastDrawTime = [[NSDate alloc] init];
}
© Stack Overflow or respective owner